package org.agent.aigccore.basic.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 时区配置类
 * 统一配置系统使用UTC+8时区
 */
@Configuration
public class TimezoneConfig {
    
    /**
     * 系统默认时区：UTC+8 (Asia/Shanghai)
     */
    public static final ZoneId SYSTEM_ZONE_ID = ZoneId.of("Asia/Shanghai");
    public static final ZoneOffset SYSTEM_ZONE_OFFSET = ZoneOffset.of("+08:00");
    
    /**
     * 系统默认时间格式化器
     */
    public static final DateTimeFormatter SYSTEM_DATETIME_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(SYSTEM_ZONE_ID);
    
    /**
     * ISO格式时间格式化器（带时区信息）
     */
    public static final DateTimeFormatter ISO_DATETIME_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").withZone(SYSTEM_ZONE_ID);
    
    /**
     * 获取当前系统时间（UTC+8）
     */
    public static OffsetDateTime now() {
        return OffsetDateTime.now(SYSTEM_ZONE_OFFSET);
    }
    
    /**
     * 将UTC时间转换为系统时区时间
     */
    public static OffsetDateTime fromUtc(java.time.Instant instant) {
        return instant.atOffset(SYSTEM_ZONE_OFFSET);
    }
    
    /**
     * 将系统时区时间转换为UTC时间
     */
    public static java.time.Instant toUtc(OffsetDateTime offsetDateTime) {
        return offsetDateTime.toInstant();
    }
    
    /**
     * 格式化时间为系统时区字符串
     */
    public static String format(OffsetDateTime offsetDateTime) {
        return offsetDateTime.format(SYSTEM_DATETIME_FORMATTER);
    }
    
    /**
     * 格式化时间为ISO字符串（带时区）
     */
    public static String formatIso(OffsetDateTime offsetDateTime) {
        return offsetDateTime.format(ISO_DATETIME_FORMATTER);
    }
}
